[INFO] cloning repository https://github.com/rsr5/signal-ha
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/rsr5/signal-ha" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ea416defa88558f28d4864e6a11327c6d594232d
[INFO] testing rsr5/signal-ha against master#cced03bfd61a304243a34504618ecec86c17063f for pr-154065-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/rsr5/signal-ha
[INFO] finished tweaking git repo https://github.com/rsr5/signal-ha
[INFO] tweaked toml for git repo https://github.com/rsr5/signal-ha written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/rsr5/signal-ha on toolchain cced03bfd61a304243a34504618ecec86c17063f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/rsr5/signal-ha already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Updating git repository `https://github.com/pydantic/monty.git`
[INFO] [stderr]     Updating git repository `https://github.com/astral-sh/ruff.git`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded named_pipe v0.4.1
[INFO] [stderr]   Downloaded subprocess v0.2.15
[INFO] [stderr]   Downloaded sunrise v3.0.0
[INFO] [stderr]   Downloaded saturating v0.1.0
[INFO] [stderr]   Downloaded mysql v25.0.1
[INFO] [stderr]   Downloaded pyo3-macros v0.25.1
[INFO] [stderr]   Downloaded attribute-derive-macro v0.10.5
[INFO] [stderr]   Downloaded btoi v0.4.3
[INFO] [stderr]   Downloaded io-enum v1.2.1
[INFO] [stderr]   Downloaded frunk_proc_macro_helpers v0.1.4
[INFO] [stderr]   Downloaded get-size-derive2 v0.7.4
[INFO] [stderr]   Downloaded frunk_proc_macros v0.1.4
[INFO] [stderr]   Downloaded is-macro v0.3.7
[INFO] [stderr]   Downloaded mysql-common-derive v0.31.2
[INFO] [stderr]   Downloaded frunk_derives v0.4.4
[INFO] [stderr]   Downloaded bufstream v0.1.4
[INFO] [stderr]   Downloaded attribute-derive v0.10.5
[INFO] [stderr]   Downloaded unicode_names2_generator v1.3.0
[INFO] [stderr]   Downloaded get-size2 v0.7.4
[INFO] [stderr]   Downloaded rkyv_derive v0.7.46
[INFO] [stderr]   Downloaded derive_utils v0.15.1
[INFO] [stderr]   Downloaded mysql_common v0.32.4
[INFO] [stderr]   Downloaded frunk_core v0.4.4
[INFO] [stderr]   Downloaded pyo3-build-config v0.28.2
[INFO] [stderr]   Downloaded frunk v0.4.4
[INFO] [stderr]   Downloaded pyo3-build-config v0.25.1
[INFO] [stderr]   Downloaded pyo3-macros-backend v0.25.1
[INFO] [stderr]   Downloaded pyo3-ffi v0.25.1
[INFO] [stderr]   Downloaded ordermap v1.1.0
[INFO] [stderr]   Downloaded fancy-regex v0.17.0
[INFO] [stderr]   Downloaded bigdecimal v0.4.10
[INFO] [stderr]   Downloaded rkyv v0.7.46
[INFO] [stderr]   Downloaded unicode_names2 v1.3.0
[INFO] [stderr]   Downloaded libz-sys v1.1.25
[INFO] [stderr]   Downloaded pyo3 v0.25.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f32291f2be9391df475aad05b17f309645febdcca8d8743178c58c649be7c93f
[INFO] running `Command { std: "docker" "start" "-a" "f32291f2be9391df475aad05b17f309645febdcca8d8743178c58c649be7c93f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f32291f2be9391df475aad05b17f309645febdcca8d8743178c58c649be7c93f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f32291f2be9391df475aad05b17f309645febdcca8d8743178c58c649be7c93f", kill_on_drop: false }`
[INFO] [stdout] f32291f2be9391df475aad05b17f309645febdcca8d8743178c58c649be7c93f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 97237646d25c720855133f2ab39c6ae4142a5ed714a9ffe22c0c2a793175bd16
[INFO] running `Command { std: "docker" "start" "-a" "97237646d25c720855133f2ab39c6ae4142a5ed714a9ffe22c0c2a793175bd16", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling zerocopy v0.8.40
[INFO] [stderr]    Compiling target-lexicon v0.13.5
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling collection_literals v1.0.3
[INFO] [stderr]    Compiling interpolator v0.5.0
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling proc-macro-utils v0.10.0
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling matchit v0.8.4
[INFO] [stderr]    Compiling pyo3-build-config v0.25.1
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling getopts v0.2.24
[INFO] [stderr]    Compiling pyo3-build-config v0.28.2
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling manyhow-macros v0.11.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling heapless v0.7.17
[INFO] [stderr]    Compiling data-encoding v2.10.0
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling iri-string v0.7.10
[INFO] [stderr]    Compiling tinyvec v1.10.0
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling hash32 v0.2.1
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling rustc-hash v2.1.1
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling pyo3-ffi v0.25.1
[INFO] [stderr]    Compiling pyo3-macros-backend v0.25.1
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling pyo3 v0.25.1
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling monty v0.0.7 (https://github.com/pydantic/monty.git?branch=main#bf7c7ef4)
[INFO] [stderr]    Compiling unindent v0.2.4
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling ordermap v1.1.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling manyhow v0.11.4
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling unicode_names2_generator v1.3.0
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling fancy-regex v0.17.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling quote-use-macros v0.8.4
[INFO] [stderr]    Compiling derive-where v1.6.0
[INFO] [stderr]    Compiling quote-use v0.8.4
[INFO] [stderr]    Compiling attribute-derive-macro v0.10.5
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling unicode_names2 v1.3.0
[INFO] [stderr]    Compiling is-macro v0.3.7
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling attribute-derive v0.10.5
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling cobs v0.3.0
[INFO] [stderr]    Compiling get-size-derive2 v0.7.4
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling pyo3-macros v0.25.1
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling get-size2 v0.7.4
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling ruff_text_size v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling ruff_source_file v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling tungstenite v0.24.0
[INFO] [stderr]    Compiling ruff_python_trivia v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling postcard v1.1.3
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling ruff_python_ast v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling sunrise v3.0.0
[INFO] [stderr]    Compiling signal-ha-lighting v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-lighting)
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling ruff_python_parser v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.8.8
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling signal-ha v0.1.0 (/opt/rustwide/workdir/crates/signal-ha)
[INFO] [stderr]    Compiling message-board v0.1.0 (/opt/rustwide/workdir/crates/message-board)
[INFO] [stderr]    Compiling signal-ha-recorder v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-recorder)
[INFO] [stderr]    Compiling signal-ha-py v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-py)
[INFO] [stderr]    Compiling signal-ha-shell v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-shell)
[INFO] [stderr]    Compiling signal-ha-agent v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-agent)
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stdout]    |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stdout]    |
[INFO] [stdout] 91 | impl Tool for GetStateTool {
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl Tool for GetStatesTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl Tool for GetHistoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stdout]     |
[INFO] [stdout] 298 | impl Tool for GetLogbookTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stdout]     |
[INFO] [stdout] 372 | impl Tool for GetStatusPageTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stdout]     |
[INFO] [stdout] 414 | impl Tool for WriteLogTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stdout]     |
[INFO] [stdout] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stdout]     |
[INFO] [stdout] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stdout]     |
[INFO] [stdout] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stdout]     |
[INFO] [stdout] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stdout]     |
[INFO] [stdout] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stdout]     |
[INFO] [stdout] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stdout]     |
[INFO] [stdout] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stdout]     |
[INFO] [stdout] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stdout]     |
[INFO] [stdout] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stdout]     |
[INFO] [stdout] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stdout]     |
[INFO] [stdout] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stdout]     |
[INFO] [stdout] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stdout]     |
[INFO] [stdout] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stdout]     |
[INFO] [stdout] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 |     registry.register(GetStateTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 |     registry.register(GetHistoryTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 |     registry.register(GetLogbookTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 |     registry.register(GetStatusPageTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 |     registry.register(WriteLogTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stdout]    |
[INFO] [stdout] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stdout]    |
[INFO] [stdout] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stdout]    |
[INFO] [stdout] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                                          ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                                       ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_line` is never read
[INFO] [stdout]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CodeBlock {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 26s
[INFO] running `Command { std: "docker" "inspect" "97237646d25c720855133f2ab39c6ae4142a5ed714a9ffe22c0c2a793175bd16", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "97237646d25c720855133f2ab39c6ae4142a5ed714a9ffe22c0c2a793175bd16", kill_on_drop: false }`
[INFO] [stdout] 97237646d25c720855133f2ab39c6ae4142a5ed714a9ffe22c0c2a793175bd16
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 1a99daa008a775825c34851765f2c5780f9f8679de2693445df84c66e68dfd09
[INFO] running `Command { std: "docker" "start" "-a" "1a99daa008a775825c34851765f2c5780f9f8679de2693445df84c66e68dfd09", kill_on_drop: false }`
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling signal-ha-lighting v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-lighting)
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling ruff_python_ast v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling tempfile v3.26.0
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling tungstenite v0.24.0
[INFO] [stderr]    Compiling ruff_python_parser v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling monty v0.0.7 (https://github.com/pydantic/monty.git?branch=main#bf7c7ef4)
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.8.8
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling signal-ha v0.1.0 (/opt/rustwide/workdir/crates/signal-ha)
[INFO] [stderr]    Compiling message-board v0.1.0 (/opt/rustwide/workdir/crates/message-board)
[INFO] [stderr]    Compiling signal-ha-recorder v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-recorder)
[INFO] [stderr]    Compiling signal-ha-shell v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-shell)
[INFO] [stderr]    Compiling signal-ha-agent v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-agent)
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stdout]    |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stdout]    |
[INFO] [stdout] 91 | impl Tool for GetStateTool {
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl Tool for GetStatesTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl Tool for GetHistoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stdout]     |
[INFO] [stdout] 298 | impl Tool for GetLogbookTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stdout]     |
[INFO] [stdout] 372 | impl Tool for GetStatusPageTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stdout]     |
[INFO] [stdout] 414 | impl Tool for WriteLogTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stdout]     |
[INFO] [stdout] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stdout]     |
[INFO] [stdout] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stdout]     |
[INFO] [stdout] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stdout]     |
[INFO] [stdout] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stdout]     |
[INFO] [stdout] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stdout]     |
[INFO] [stdout] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stdout]     |
[INFO] [stdout] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stdout]     |
[INFO] [stdout] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stdout]     |
[INFO] [stdout] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stdout]     |
[INFO] [stdout] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stdout]     |
[INFO] [stdout] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stdout]     |
[INFO] [stdout] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stdout]     |
[INFO] [stdout] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stdout]     |
[INFO] [stdout] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling signal-ha-py v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-py)
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 |     registry.register(GetStateTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 |     registry.register(GetHistoryTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 |     registry.register(GetLogbookTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 |     registry.register(GetStatusPageTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 |     registry.register(WriteLogTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stdout]    |
[INFO] [stdout] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stdout]    |
[INFO] [stdout] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stdout]    |
[INFO] [stdout] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                                          ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                                       ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_line` is never read
[INFO] [stdout]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CodeBlock {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::register_all_builds_registry`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:637:11
[INFO] [stdout]     |
[INFO] [stdout] 637 |       async fn register_all_builds_registry() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] ...   |
[INFO] [stdout] 647 | |         assert!(docs.contains("suggest_config_change"));
[INFO] [stdout] 648 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::schedule_sets_duration`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:610:11
[INFO] [stdout]     |
[INFO] [stdout] 610 |       async fn schedule_sets_duration() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 611 | |         let next = Arc::new(Mutex::new(None));
[INFO] [stdout] 612 | |         let tool = ScheduleNextSessionTool { next: next.clone() };
[INFO] [stdout] ...   |
[INFO] [stdout] 616 | |         assert_eq!(*next.lock().await, Some(Duration::from_secs(12 * 3600)));
[INFO] [stdout] 617 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::suggest_config_change_logs`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:620:11
[INFO] [stdout]     |
[INFO] [stdout] 620 |       async fn suggest_config_change_logs() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 621 | |         let tool = SuggestConfigChangeTool;
[INFO] [stdout] 622 | |         let r = tool
[INFO] [stdout] 623 | |             .execute(json!({
[INFO] [stdout] ...   |
[INFO] [stdout] 633 | |         assert!(r.output.contains("high"));
[INFO] [stdout] 634 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::write_log_levels`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:599:11
[INFO] [stdout]     |
[INFO] [stdout] 599 |       async fn write_log_levels() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 600 | |         let tool = WriteLogTool;
[INFO] [stdout] 601 | |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stdout] 602 | |         assert!(!r.is_error);
[INFO] [stdout] ...   |
[INFO] [stdout] 606 | |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stdout] 607 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::duplicate_tool_panics`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 | /     fn duplicate_tool_panics() {
[INFO] [stdout] 257 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 258 | |         reg.register(EchoTool);
[INFO] [stdout] 259 | |         reg.register(EchoTool);
[INFO] [stdout] 260 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::parse_no_args`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:214:5
[INFO] [stdout]     |
[INFO] [stdout] 214 | /     fn parse_no_args() {
[INFO] [stdout] 215 | |         let content = "get_status_page()";
[INFO] [stdout] 216 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stdout] 217 | |         let tool_name = &content[..paren_pos];
[INFO] [stdout] ...   |
[INFO] [stdout] 224 | |         assert!(args_str.is_empty());
[INFO] [stdout] 225 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::parse_tool_call_syntax`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:201:5
[INFO] [stdout]     |
[INFO] [stdout] 201 | /     fn parse_tool_call_syntax() {
[INFO] [stdout] 202 | |         let content = r#"get_state({"entity_id": "sensor.temp"})"#;
[INFO] [stdout] 203 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stdout] 204 | |         let tool_name = &content[..paren_pos];
[INFO] [stdout] ...   |
[INFO] [stdout] 210 | |         assert_eq!(args["entity_id"], "sensor.temp");
[INFO] [stdout] 211 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::registry_dispatch`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:228:11
[INFO] [stdout]     |
[INFO] [stdout] 228 |       async fn registry_dispatch() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 229 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 230 | |         reg.register(EchoTool);
[INFO] [stdout] ...   |
[INFO] [stdout] 234 | |         assert_eq!(result.output, "hello");
[INFO] [stdout] 235 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::registry_unknown_tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:238:11
[INFO] [stdout]     |
[INFO] [stdout] 238 |       async fn registry_unknown_tool() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 239 | |         let reg = ToolRegistry::new();
[INFO] [stdout] 240 | |         let result = reg.dispatch("nope()").await;
[INFO] [stdout] 241 | |         assert!(result.is_error);
[INFO] [stdout] 242 | |         assert!(result.output.contains("Unknown tool"));
[INFO] [stdout] 243 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::tool_docs_generated`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:246:5
[INFO] [stdout]     |
[INFO] [stdout] 246 | /     fn tool_docs_generated() {
[INFO] [stdout] 247 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 248 | |         reg.register(EchoTool);
[INFO] [stdout] 249 | |         let docs = reg.tool_docs();
[INFO] [stdout] 250 | |         assert!(docs.contains("echo"));
[INFO] [stdout] 251 | |         assert!(docs.contains("Echoes the input back"));
[INFO] [stdout] 252 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stdout]    |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stdout]    |
[INFO] [stdout] 91 | impl Tool for GetStateTool {
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl Tool for GetStatesTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl Tool for GetHistoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stdout]     |
[INFO] [stdout] 298 | impl Tool for GetLogbookTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stdout]     |
[INFO] [stdout] 372 | impl Tool for GetStatusPageTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stdout]     |
[INFO] [stdout] 414 | impl Tool for WriteLogTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stdout]     |
[INFO] [stdout] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stdout]     |
[INFO] [stdout] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stdout]     |
[INFO] [stdout] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stdout]     |
[INFO] [stdout] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stdout]     |
[INFO] [stdout] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stdout]     |
[INFO] [stdout] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stdout]     |
[INFO] [stdout] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stdout]     |
[INFO] [stdout] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stdout]     |
[INFO] [stdout] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stdout]     |
[INFO] [stdout] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stdout]     |
[INFO] [stdout] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stdout]     |
[INFO] [stdout] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stdout]     |
[INFO] [stdout] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stdout]     |
[INFO] [stdout] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:641:23
[INFO] [stdout]     |
[INFO] [stdout] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stdout]     |                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 |     registry.register(GetStateTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 |     registry.register(GetHistoryTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 |     registry.register(GetLogbookTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 |     registry.register(GetStatusPageTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 |     registry.register(WriteLogTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stdout]    |
[INFO] [stdout] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stdout]    |
[INFO] [stdout] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stdout]    |
[INFO] [stdout] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                                          ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                                       ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:601:22
[INFO] [stdout]     |
[INFO] [stdout] 601 |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:602:18
[INFO] [stdout]     |
[INFO] [stdout] 602 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:603:17
[INFO] [stdout]     |
[INFO] [stdout] 603 |         assert!(r.output.contains("Logged (info)"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:605:22
[INFO] [stdout]     |
[INFO] [stdout] 605 |         let r = tool.execute(json!({"message": "test", "level": "warn"})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:606:17
[INFO] [stdout]     |
[INFO] [stdout] 606 |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:614:22
[INFO] [stdout]     |
[INFO] [stdout] 614 |         let r = tool.execute(json!({"hours": 12})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:615:18
[INFO] [stdout]     |
[INFO] [stdout] 615 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:623:14
[INFO] [stdout]     |
[INFO] [stdout] 623 |             .execute(json!({
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:632:18
[INFO] [stdout]     |
[INFO] [stdout] 632 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:633:17
[INFO] [stdout]     |
[INFO] [stdout] 633 |         assert!(r.output.contains("high"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolRegistry::new`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:641:37
[INFO] [stdout]     |
[INFO] [stdout] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stdout]     |                                     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:642:13
[INFO] [stdout]     |
[INFO] [stdout] 642 |         reg.register(WriteLogTool);
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:643:13
[INFO] [stdout]     |
[INFO] [stdout] 643 |         reg.register(SuggestConfigChangeTool);
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::tool_docs`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:645:24
[INFO] [stdout]     |
[INFO] [stdout] 645 |         let docs = reg.tool_docs();
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_line` is never read
[INFO] [stdout]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CodeBlock {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 51.75s
[INFO] running `Command { std: "docker" "inspect" "1a99daa008a775825c34851765f2c5780f9f8679de2693445df84c66e68dfd09", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1a99daa008a775825c34851765f2c5780f9f8679de2693445df84c66e68dfd09", kill_on_drop: false }`
[INFO] [stdout] 1a99daa008a775825c34851765f2c5780f9f8679de2693445df84c66e68dfd09
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] c017020824f97fd3e1b861ad6f59c5b12d958b1a571f5d16c267c5ce1004c6cf
[INFO] running `Command { std: "docker" "start" "-a" "c017020824f97fd3e1b861ad6f59c5b12d958b1a571f5d16c267c5ce1004c6cf", kill_on_drop: false }`
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stderr]    |
[INFO] [stderr] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stderr]    |                    ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stderr]    |
[INFO] [stderr] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stderr]    |                          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stderr]    |
[INFO] [stderr] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stderr]    |                                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stderr]    |                                    ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stderr]    |
[INFO] [stderr] 91 | impl Tool for GetStateTool {
[INFO] [stderr]    |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stderr]     |
[INFO] [stderr] 138 | impl Tool for GetStatesTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stderr]     |
[INFO] [stderr] 203 | impl Tool for GetHistoryTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stderr]     |
[INFO] [stderr] 298 | impl Tool for GetLogbookTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stderr]     |
[INFO] [stderr] 372 | impl Tool for GetStatusPageTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stderr]     |
[INFO] [stderr] 414 | impl Tool for WriteLogTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stderr]     |
[INFO] [stderr] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stderr]     |
[INFO] [stderr] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stderr]     |
[INFO] [stderr] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stderr]     |
[INFO] [stderr] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stderr]     |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stderr]     |
[INFO] [stderr] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stderr]     |
[INFO] [stderr] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stderr]     |                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stderr]     |
[INFO] [stderr] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stderr]     |                                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stderr]     |
[INFO] [stderr] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stderr]     |                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stderr]     |
[INFO] [stderr] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stderr]     |                              ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stderr]     |
[INFO] [stderr] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stderr]     |
[INFO] [stderr] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stderr]     |
[INFO] [stderr] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stderr]     |                                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stderr]     |
[INFO] [stderr] 163 |                 return ToolResult::err("No states returned");
[INFO] [stderr]     |                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stderr]     |
[INFO] [stderr] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stderr]     |             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stderr]     |
[INFO] [stderr] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stderr]     |
[INFO] [stderr] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stderr]     |                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stderr]     |
[INFO] [stderr] 270 |                         ToolResult::ok(
[INFO] [stderr]     |                         ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stderr]     |
[INFO] [stderr] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stderr]     |                               ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stderr]     |
[INFO] [stderr] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stderr]     |                             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stderr]     |
[INFO] [stderr] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stderr]     |
[INFO] [stderr] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stderr]     |
[INFO] [stderr] 348 |                         ToolResult::ok(
[INFO] [stderr]     |                         ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stderr]     |
[INFO] [stderr] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stderr]     |                               ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stderr]     |
[INFO] [stderr] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stderr]     |                             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stderr]     |
[INFO] [stderr] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stderr]     |
[INFO] [stderr] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stderr]     |
[INFO] [stderr] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stderr]     |                                 ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stderr]     |
[INFO] [stderr] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stderr]     |                               ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stderr]     |
[INFO] [stderr] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stderr]     |                             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stderr]     |
[INFO] [stderr] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stderr]     |
[INFO] [stderr] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stderr]     |
[INFO] [stderr] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stderr]     |             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stderr]     |
[INFO] [stderr] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stderr]     |
[INFO] [stderr] 470 |             ToolResult::ok(
[INFO] [stderr]     |             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stderr]     |
[INFO] [stderr] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stderr]     |
[INFO] [stderr] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stderr]     |                        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stderr]     |
[INFO] [stderr] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stderr]     |
[INFO] [stderr] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stderr]     |                           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stderr]     |
[INFO] [stderr] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stderr]     |
[INFO] [stderr] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stderr]     |             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stderr]     |
[INFO] [stderr] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stderr]     |                                      ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stderr]     |
[INFO] [stderr] 582 |             ToolResult::ok(format!(
[INFO] [stderr]     |             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stderr]    |
[INFO] [stderr] 54 |     registry.register(GetStateTool {
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stderr]    |
[INFO] [stderr] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stderr]    |
[INFO] [stderr] 60 |     registry.register(GetHistoryTool {
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stderr]    |
[INFO] [stderr] 65 |     registry.register(GetLogbookTool {
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stderr]    |
[INFO] [stderr] 70 |     registry.register(GetStatusPageTool {
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stderr]    |
[INFO] [stderr] 74 |     registry.register(WriteLogTool);
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stderr]    |
[INFO] [stderr] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stderr]    |
[INFO] [stderr] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stderr]    |
[INFO] [stderr] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stderr]    |
[INFO] [stderr] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stderr]     |
[INFO] [stderr] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stderr]     |                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stderr]     |
[INFO] [stderr] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stderr]     |                                              ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stderr]     |
[INFO] [stderr] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stderr]     |                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stderr]     |
[INFO] [stderr] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stderr]     |                                          ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stderr]     |
[INFO] [stderr] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stderr]     |                                       ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stderr]     |
[INFO] [stderr] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stderr]     |                                              ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stderr]     |
[INFO] [stderr] 163 |                 return ToolResult::err("No states returned");
[INFO] [stderr]     |                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stderr]     |
[INFO] [stderr] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stderr]     |                         ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stderr]     |
[INFO] [stderr] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stderr]     |                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stderr]     |
[INFO] [stderr] 270 |                         ToolResult::ok(
[INFO] [stderr]     |                                     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stderr]     |
[INFO] [stderr] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stderr]     |                                           ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stderr]     |
[INFO] [stderr] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stderr]     |                                         ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stderr]     |
[INFO] [stderr] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stderr]     |                                       ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stderr]     |
[INFO] [stderr] 348 |                         ToolResult::ok(
[INFO] [stderr]     |                                     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stderr]     |
[INFO] [stderr] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stderr]     |                                           ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stderr]     |
[INFO] [stderr] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stderr]     |                                         ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stderr]     |
[INFO] [stderr] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stderr]     |                                       ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stderr]     |
[INFO] [stderr] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stderr]     |                                             ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stderr]     |
[INFO] [stderr] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stderr]     |                                           ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stderr]     |
[INFO] [stderr] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stderr]     |                                         ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stderr]     |
[INFO] [stderr] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stderr]     |                                       ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stderr]     |
[INFO] [stderr] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stderr]     |                         ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stderr]     |
[INFO] [stderr] 470 |             ToolResult::ok(
[INFO] [stderr]     |                         ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stderr]     |
[INFO] [stderr] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stderr]     |                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stderr]     |
[INFO] [stderr] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stderr]     |                                       ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stderr]     |
[INFO] [stderr] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stderr]     |                                       ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stderr]     |
[INFO] [stderr] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stderr]     |                         ^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stderr]     |
[INFO] [stderr] 582 |             ToolResult::ok(format!(
[INFO] [stderr]     |                         ^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `start_line` is never read
[INFO] [stderr]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub struct CodeBlock {
[INFO] [stderr]    |            --------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub start_line: usize,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `ha_tools::tests::register_all_builds_registry`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:637:11
[INFO] [stderr]     |
[INFO] [stderr] 637 |       async fn register_all_builds_registry() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] ...   |
[INFO] [stderr] 647 | |         assert!(docs.contains("suggest_config_change"));
[INFO] [stderr] 648 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `ha_tools::tests::schedule_sets_duration`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:610:11
[INFO] [stderr]     |
[INFO] [stderr] 610 |       async fn schedule_sets_duration() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] 611 | |         let next = Arc::new(Mutex::new(None));
[INFO] [stderr] 612 | |         let tool = ScheduleNextSessionTool { next: next.clone() };
[INFO] [stderr] ...   |
[INFO] [stderr] 616 | |         assert_eq!(*next.lock().await, Some(Duration::from_secs(12 * 3600)));
[INFO] [stderr] 617 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `ha_tools::tests::suggest_config_change_logs`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:620:11
[INFO] [stderr]     |
[INFO] [stderr] 620 |       async fn suggest_config_change_logs() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] 621 | |         let tool = SuggestConfigChangeTool;
[INFO] [stderr] 622 | |         let r = tool
[INFO] [stderr] 623 | |             .execute(json!({
[INFO] [stderr] ...   |
[INFO] [stderr] 633 | |         assert!(r.output.contains("high"));
[INFO] [stderr] 634 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `ha_tools::tests::write_log_levels`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:599:11
[INFO] [stderr]     |
[INFO] [stderr] 599 |       async fn write_log_levels() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] 600 | |         let tool = WriteLogTool;
[INFO] [stderr] 601 | |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stderr] 602 | |         assert!(!r.is_error);
[INFO] [stderr] ...   |
[INFO] [stderr] 606 | |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stderr] 607 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::duplicate_tool_panics`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:256:5
[INFO] [stderr]     |
[INFO] [stderr] 256 | /     fn duplicate_tool_panics() {
[INFO] [stderr] 257 | |         let mut reg = ToolRegistry::new();
[INFO] [stderr] 258 | |         reg.register(EchoTool);
[INFO] [stderr] 259 | |         reg.register(EchoTool);
[INFO] [stderr] 260 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::parse_no_args`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:214:5
[INFO] [stderr]     |
[INFO] [stderr] 214 | /     fn parse_no_args() {
[INFO] [stderr] 215 | |         let content = "get_status_page()";
[INFO] [stderr] 216 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stderr] 217 | |         let tool_name = &content[..paren_pos];
[INFO] [stderr] ...   |
[INFO] [stderr] 224 | |         assert!(args_str.is_empty());
[INFO] [stderr] 225 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::parse_tool_call_syntax`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:201:5
[INFO] [stderr]     |
[INFO] [stderr] 201 | /     fn parse_tool_call_syntax() {
[INFO] [stderr] 202 | |         let content = r#"get_state({"entity_id": "sensor.temp"})"#;
[INFO] [stderr] 203 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stderr] 204 | |         let tool_name = &content[..paren_pos];
[INFO] [stderr] ...   |
[INFO] [stderr] 210 | |         assert_eq!(args["entity_id"], "sensor.temp");
[INFO] [stderr] 211 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::registry_dispatch`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:228:11
[INFO] [stderr]     |
[INFO] [stderr] 228 |       async fn registry_dispatch() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] 229 | |         let mut reg = ToolRegistry::new();
[INFO] [stderr] 230 | |         reg.register(EchoTool);
[INFO] [stderr] ...   |
[INFO] [stderr] 234 | |         assert_eq!(result.output, "hello");
[INFO] [stderr] 235 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::registry_unknown_tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:238:11
[INFO] [stderr]     |
[INFO] [stderr] 238 |       async fn registry_unknown_tool() {
[INFO] [stderr]     |  ___________^
[INFO] [stderr] 239 | |         let reg = ToolRegistry::new();
[INFO] [stderr] 240 | |         let result = reg.dispatch("nope()").await;
[INFO] [stderr] 241 | |         assert!(result.is_error);
[INFO] [stderr] 242 | |         assert!(result.output.contains("Unknown tool"));
[INFO] [stderr] 243 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `tools::tests::tool_docs_generated`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/tools.rs:246:5
[INFO] [stderr]     |
[INFO] [stderr] 246 | /     fn tool_docs_generated() {
[INFO] [stderr] 247 | |         let mut reg = ToolRegistry::new();
[INFO] [stderr] 248 | |         reg.register(EchoTool);
[INFO] [stderr] 249 | |         let docs = reg.tool_docs();
[INFO] [stderr] 250 | |         assert!(docs.contains("echo"));
[INFO] [stderr] 251 | |         assert!(docs.contains("Echoes the input back"));
[INFO] [stderr] 252 | |     }
[INFO] [stderr]     | |_____^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stderr]    |
[INFO] [stderr] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stderr]    |                    ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:641:23
[INFO] [stderr]     |
[INFO] [stderr] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stderr]     |                       ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:601:22
[INFO] [stderr]     |
[INFO] [stderr] 601 |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stderr]     |                      ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:602:18
[INFO] [stderr]     |
[INFO] [stderr] 602 |         assert!(!r.is_error);
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:603:17
[INFO] [stderr]     |
[INFO] [stderr] 603 |         assert!(r.output.contains("Logged (info)"));
[INFO] [stderr]     |                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:605:22
[INFO] [stderr]     |
[INFO] [stderr] 605 |         let r = tool.execute(json!({"message": "test", "level": "warn"})).await;
[INFO] [stderr]     |                      ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:606:17
[INFO] [stderr]     |
[INFO] [stderr] 606 |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stderr]     |                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:614:22
[INFO] [stderr]     |
[INFO] [stderr] 614 |         let r = tool.execute(json!({"hours": 12})).await;
[INFO] [stderr]     |                      ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:615:18
[INFO] [stderr]     |
[INFO] [stderr] 615 |         assert!(!r.is_error);
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:623:14
[INFO] [stderr]     |
[INFO] [stderr] 623 |             .execute(json!({
[INFO] [stderr]     |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:632:18
[INFO] [stderr]     |
[INFO] [stderr] 632 |         assert!(!r.is_error);
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:633:17
[INFO] [stderr]     |
[INFO] [stderr] 633 |         assert!(r.output.contains("high"));
[INFO] [stderr]     |                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `tools::ToolRegistry::new`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:641:37
[INFO] [stderr]     |
[INFO] [stderr] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stderr]     |                                     ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:642:13
[INFO] [stderr]     |
[INFO] [stderr] 642 |         reg.register(WriteLogTool);
[INFO] [stderr]     |             ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:643:13
[INFO] [stderr]     |
[INFO] [stderr] 643 |         reg.register(SuggestConfigChangeTool);
[INFO] [stderr]     |             ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `tools::ToolRegistry::tool_docs`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stderr]    --> crates/signal-ha-agent/src/ha_tools.rs:645:24
[INFO] [stderr]     |
[INFO] [stderr] 645 |         let docs = reg.tool_docs();
[INFO] [stderr]     |                        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `signal-ha-agent` (lib) generated 91 warnings
[INFO] [stderr] warning: `signal-ha-agent` (lib test) generated 116 warnings (90 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.62s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/message_board-7a9959657fd58d43)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/message_board-a3a82f82f4e40ae7)
[INFO] [stderr]      Running tests/api_tests.rs (/opt/rustwide/target/debug/deps/api_tests-04ca9eafb0289e46)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test patch_nonexistent_post_returns_404 ... ok
[INFO] [stdout] test create_post_returns_201 ... ok
[INFO] [stdout] test get_nonexistent_post_returns_404 ... ok
[INFO] [stdout] test list_posts_empty ... ok
[INFO] [stdout] test create_post_missing_fields_returns_422 ... ok
[INFO] [stdout] test reply_to_nonexistent_post_returns_404 ... ok
[INFO] [stdout] test create_reply_missing_fields_returns_422 ... ok
[INFO] [stdout] test close_post ... ok
[INFO] [stdout] test get_post_includes_replies ... ok
[INFO] [stdout] test create_reply_returns_201 ... ok
[INFO] [stdout] test list_posts_with_filter ... ok
[INFO] [stdout] test update_post_body ... ok
[INFO] [stdout] test full_agent_user_lifecycle ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/db_tests.rs (/opt/rustwide/target/debug/deps/db_tests-f3725206c3594ca7)
[INFO] [stdout] 
[INFO] [stdout] running 24 tests
[INFO] [stdout] test get_post_includes_empty_replies ... ok
[INFO] [stdout] test create_post_returns_with_id_and_defaults ... ok
[INFO] [stdout] test auto_increment_ids ... ok
[INFO] [stdout] test list_posts_filter_by_active ... ok
[INFO] [stdout] test empty_body_allowed ... ok
[INFO] [stdout] test get_post_not_found ... ok
[INFO] [stdout] test create_reply_and_fetch_with_post ... ok
[INFO] [stdout] test large_body ... ok
[INFO] [stdout] test list_posts_filter_by_agent ... ok
[INFO] [stdout] test list_posts_ordered_newest_first ... ok
[INFO] [stdout] test replies_ordered_chronologically ... ok
[INFO] [stdout] test list_posts_omits_replies ... ok
[INFO] [stdout] test migrate_twice_is_safe ... ok
[INFO] [stdout] test reply_to_nonexistent_post_errors ... ok
[INFO] [stdout] test list_posts_filter_agent_and_active ... ok
[INFO] [stdout] test list_posts_no_filter_returns_all ... ok
[INFO] [stdout] test replies_isolated_between_posts ... ok
[INFO] [stdout] test update_nonexistent_post_errors ... ok
[INFO] [stdout] test unicode_content ... ok
[INFO] [stdout] test update_post_deactivate ... ok
[INFO] [stdout] test update_post_body ... ok
[INFO] [stdout] test update_post_both_fields ... ok
[INFO] [stdout] test update_post_reactivate ... ok
[INFO] [stdout] test many_posts_from_multiple_agents ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha-b9beccc280640cf1)
[INFO] [stdout] 
[INFO] [stdout] running 37 tests
[INFO] [stdout] test client::tests::parse_event_missing_entity_id ... ok
[INFO] [stdout] test dashboard::tests::check_success_ok ... ok
[INFO] [stdout] test dashboard::tests::dashboard_spec_from_yaml ... ok
[INFO] [stdout] test dashboard::tests::dashboard_spec_invalid_yaml ... ok
[INFO] [stdout] test dashboard::tests::check_success_error ... ok
[INFO] [stdout] test dashboard::tests::validate_builtin_types_pass ... ok
[INFO] [stdout] test power_fsm::tests::full_cycle ... ok
[INFO] [stdout] test power_fsm::tests::power_returns_during_pending_off ... ok
[INFO] [stdout] test dashboard::tests::dashboard_spec_jinja_template_in_content ... ok
[INFO] [stdout] test power_fsm::tests::spike_enters_pending_on ... ok
[INFO] [stdout] test status::tests::render_bool_values ... ok
[INFO] [stdout] test power_fsm::tests::starts_off ... ok
[INFO] [stdout] test dashboard::tests::dashboard_spec_default_icon ... ok
[INFO] [stdout] test status::tests::format_uptime_ranges ... ok
[INFO] [stdout] test status::tests::render_countdown_full ... ok
[INFO] [stdout] test status::tests::render_countdown_value ... ok
[INFO] [stdout] test status::tests::render_countdown_zero ... ok
[INFO] [stdout] test status::tests::html_render_contains_sections ... ok
[INFO] [stdout] test power_fsm::tests::energy_accumulates_during_pending_off ... ok
[INFO] [stdout] test status::tests::render_int_value ... ok
[INFO] [stdout] test status::tests::json_serialization ... ok
[INFO] [stdout] test status::tests::render_enum_value ... ok
[INFO] [stdout] test status::tests::render_score_value ... ok
[INFO] [stdout] test status::tests::set_and_read_back ... ok
[INFO] [stdout] test client::tests::parse_subscribe_trigger_event ... ok
[INFO] [stdout] test status::tests::set_many_works ... ok
[INFO] [stdout] test status::tests::section_order_preserved ... ok
[INFO] [stdout] test status::tests::text_value_classes ... ok
[INFO] [stdout] test status::tests::tick_increments_eval_count ... ok
[INFO] [stdout] test status::tests::typed_countdown_setter ... ok
[INFO] [stdout] test status::tests::typed_setters ... ok
[INFO] [stdout] test client::tests::parse_subscribe_events_state_changed ... ok
[INFO] [stdout] test dashboard::tests::validate_finds_unknown_cards ... ok
[INFO] [stdout] test power_fsm::tests::brief_spike_no_start ... ok
[INFO] [stdout] test power_fsm::tests::low_power_stays_off ... ok
[INFO] [stdout] test power_fsm::tests::negative_watts_clamped ... ok
[INFO] [stdout] test status::tests::clear_countdown_sets_text_dash ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha_agent-302e42f54667a513)
[INFO] [stdout] 
[INFO] [stdout] running 25 tests
[INFO] [stdout] test conversation::tests::trim_keeps_system_prompt ... ok
[INFO] [stdout] test engine::tests::test_format_output_with_text ... ok
[INFO] [stdout] test engine::tests::test_combine_output ... ok
[INFO] [stdout] test engine::tests::test_format_output_empty ... ok
[INFO] [stdout] test ha_tools::tests::register_all_builds_registry ... ok
[INFO] [stdout] test ha_tools::tests::suggest_config_change_logs ... ok
[INFO] [stdout] test ha_tools::tests::schedule_sets_duration ... ok
[INFO] [stdout] test memory::tests::load_nonexistent_file ... ok
[INFO] [stdout] test parser::tests::inject_result_into_document ... ok
[INFO] [stdout] test ha_tools::tests::write_log_levels ... ok
[INFO] [stdout] test parser::tests::executable_blocks_skips_result ... ok
[INFO] [stdout] test parser::tests::unclosed_fence_ignored ... ok
[INFO] [stdout] test parser::tests::non_tool_blocks_ignored ... ok
[INFO] [stdout] test parser::tests::parse_simple_tool_block ... ok
[INFO] [stdout] test parser::tests::multiple_tool_blocks ... ok
[INFO] [stdout] test tools::tests::parse_no_args ... ok
[INFO] [stdout] test tools::tests::parse_tool_call_syntax ... ok
[INFO] [stdout] test session::tests::agent_config_can_be_constructed ... ok
[INFO] [stdout] test tools::tests::registry_unknown_tool ... ok
[INFO] [stdout] test parser::tests::strip_hallucinated_results ... ok
[INFO] [stdout] test tools::tests::registry_dispatch ... ok
[INFO] [stdout] test tools::tests::tool_docs_generated ... ok
[INFO] [stdout] test memory::tests::corrupted_file_starts_fresh ... ok
[INFO] [stdout] test memory::tests::round_trip ... ok
[INFO] [stdout] test tools::tests::duplicate_tool_panics - should panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.36s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha_lighting-aa9183045acb771b)
[INFO] [stdout] 
[INFO] [stdout] running 127 tests
[INFO] [stdout] test actuator::tests::apply_single_light_off ... ok
[INFO] [stdout] test actuator::tests::apply_single_light_on ... ok
[INFO] [stdout] test actuator::tests::brightness_drift_detected ... ok
[INFO] [stdout] test actuator::tests::brightness_outside_tolerance_written ... ok
[INFO] [stdout] test actuator::tests::apply_multiple_lights ... ok
[INFO] [stdout] test actuator::tests::ct_within_tolerance_not_written ... ok
[INFO] [stdout] test actuator::tests::empty_targets_list ... ok
[INFO] [stdout] test actuator::tests::ct_outside_tolerance_written ... ok
[INFO] [stdout] test actuator::tests::global_rate_limit_allows_after_interval ... ok
[INFO] [stdout] test actuator::tests::global_rate_limit_blocks_rapid_calls ... ok
[INFO] [stdout] test actuator::tests::no_logger_no_crash ... ok
[INFO] [stdout] test actuator::tests::light_off_when_already_off ... ok
[INFO] [stdout] test actuator::tests::per_light_rate_limit ... ok
[INFO] [stdout] test actuator::tests::per_light_rate_limit_different_lights ... ok
[INFO] [stdout] test actuator::tests::per_light_rate_limit_allows_after_interval ... ok
[INFO] [stdout] test actuator::tests::signature_unchanged_still_checks_drift ... ok
[INFO] [stdout] test actuator::tests::apply_with_transition ... ok
[INFO] [stdout] test actuator::tests::reset_clears_state ... ok
[INFO] [stdout] test actuator::tests::apply_zero_ct_not_passed ... ok
[INFO] [stdout] test lux::tests::caps_at_max ... ok
[INFO] [stdout] test lux::tests::ct_mid_lux ... ok
[INFO] [stdout] test actuator::tests::unknown_entity_state ... ok
[INFO] [stdout] test lux::tests::ct_at_low_lux ... ok
[INFO] [stdout] test lux::tests::full_day_window ... ok
[INFO] [stdout] test actuator::tests::signature_changes_on_different_targets ... ok
[INFO] [stdout] test lux::tests::ct_at_high_lux ... ok
[INFO] [stdout] test lux::tests::overnight_window ... ok
[INFO] [stdout] test lux::tests::overnight_window_nightlight ... ok
[INFO] [stdout] test lux::tests::zero_width_window ... ok
[INFO] [stdout] test lux::tests::ct_matches_bathroom_python ... ok
[INFO] [stdout] test actuator::tests::state_drift_detected ... ok
[INFO] [stdout] test actuator::tests::signature_tracked ... ok
[INFO] [stdout] test lux::tests::just_below_deadband_returns_min ... ok
[INFO] [stdout] test lux::tests::bright_enough_returns_none ... ok
[INFO] [stdout] test lux::tests::dark_room_returns_high_brightness ... ok
[INFO] [stdout] test overlay::tests::enter_takes_snapshot ... ok
[INFO] [stdout] test overlay::tests::exit_restores_light_on ... ok
[INFO] [stdout] test overlay::tests::exit_restores_light_off ... ok
[INFO] [stdout] test lux::tests::never_below_min ... ok
[INFO] [stdout] test lux::tests::ct_quarter_lux ... ok
[INFO] [stdout] test overlay::tests::exit_without_restore ... ok
[INFO] [stdout] test overlay::tests::get_snapshot_no_overlay ... ok
[INFO] [stdout] test overlay::tests::get_snapshot_unknown_entity ... ok
[INFO] [stdout] test overlay::tests::initially_inactive ... ok
[INFO] [stdout] test overlay::tests::logs_on_enter ... ok
[INFO] [stdout] test overlay::tests::restore_with_effect ... ok
[INFO] [stdout] test overlay::tests::logs_on_exit ... ok
[INFO] [stdout] test overlay::tests::restore_unavailable_light_skipped ... ok
[INFO] [stdout] test overlay::tests::snapshot_basic ... ok
[INFO] [stdout] test overlay::tests::restore_with_rgb_color ... ok
[INFO] [stdout] test overlay::tests::snapshot_from_empty_dict ... ok
[INFO] [stdout] test overlay::tests::snapshot_off ... ok
[INFO] [stdout] test overlay::tests::snapshot_from_none ... ok
[INFO] [stdout] test overlay::tests::snapshot_with_colour_modes ... ok
[INFO] [stdout] test reconcile::tests::case_insensitive ... ok
[INFO] [stdout] test overlay::tests::transition_between_modes_preserves_snapshot ... ok
[INFO] [stdout] test reconcile::tests::empty_state ... ok
[INFO] [stdout] test reconcile::tests::entity_change_on_to_off_does_not_trigger ... ok
[INFO] [stdout] test reconcile::tests::entity_change_unavailable_to_available_triggers_schedule ... ok
[INFO] [stdout] test reconcile::tests::none_state ... ok
[INFO] [stdout] test reconcile::tests::off_state ... ok
[INFO] [stdout] test reconcile::tests::reason_publishing ... ok
[INFO] [stdout] test reconcile::tests::logs_on_register ... ok
[INFO] [stdout] test reconcile::tests::reconcile_retries_if_still_unavailable ... ok
[INFO] [stdout] test reconcile::tests::reconcile_calls_on_reconcile ... ok
[INFO] [stdout] test reconcile::tests::reconcile_stops_after_max_retries ... ok
[INFO] [stdout] test reconcile::tests::register_watchers_when_disabled ... ok
[INFO] [stdout] test reconcile::tests::register_watchers_when_enabled ... ok
[INFO] [stdout] test reconcile::tests::reset_clears_timers ... ok
[INFO] [stdout] test reconcile::tests::schedule_creates_timer ... ok
[INFO] [stdout] test reconcile::tests::schedule_reconcile_all ... ok
[INFO] [stdout] test reconcile::tests::schedule_when_disabled ... ok
[INFO] [stdout] test reconcile::tests::schedule_reconcile_all_cancels_previous ... ok
[INFO] [stdout] test reconcile::tests::unavailable_state ... ok
[INFO] [stdout] test reconcile::tests::unknown_state ... ok
[INFO] [stdout] test signature::tests::brightness_zero_means_off ... ok
[INFO] [stdout] test signature::tests::deterministic_ordering ... ok
[INFO] [stdout] test signature::tests::empty_list ... ok
[INFO] [stdout] test signature::tests::include_metadata_true ... ok
[INFO] [stdout] test signature::tests::include_metadata_false ... ok
[INFO] [stdout] test overlay::tests::enter_becomes_active ... ok
[INFO] [stdout] test signature::tests::metadata_affects_ordering ... ok
[INFO] [stdout] test reconcile::tests::on_state ... ok
[INFO] [stdout] test overlay::tests::enter_with_metadata ... ok
[INFO] [stdout] test signature::tests::single_target ... ok
[INFO] [stdout] test target::tests::creation ... ok
[INFO] [stdout] test target::tests::from_map_basic ... ok
[INFO] [stdout] test target::tests::from_map_missing_fields ... ok
[INFO] [stdout] test target::tests::serde_roundtrip ... ok
[INFO] [stdout] test target::tests::roundtrip_map ... ok
[INFO] [stdout] test util::tests::as_bool_false_values ... ok
[INFO] [stdout] test target::tests::to_map_roundtrip ... ok
[INFO] [stdout] test util::tests::as_bool_true_values ... ok
[INFO] [stdout] test util::tests::clamp_above ... ok
[INFO] [stdout] test util::tests::clamp_below ... ok
[INFO] [stdout] test util::tests::clamp_within_range ... ok
[INFO] [stdout] test util::tests::kelvin_to_mired_3000 ... ok
[INFO] [stdout] test util::tests::kelvin_to_mired_6500 ... ok
[INFO] [stdout] test util::tests::kelvin_to_mired_negative ... ok
[INFO] [stdout] test util::tests::kelvin_to_mired_zero ... ok
[INFO] [stdout] test util::tests::lerp_basic ... ok
[INFO] [stdout] test util::tests::lerp_extrapolate ... ok
[INFO] [stdout] test util::tests::linmap_clamped_below ... ok
[INFO] [stdout] test util::tests::linmap_degenerate ... ok
[INFO] [stdout] test util::tests::linmap_clamped_above ... ok
[INFO] [stdout] test util::tests::linmap_mid ... ok
[INFO] [stdout] test util::tests::pct_0 ... ok
[INFO] [stdout] test util::tests::pct_100 ... ok
[INFO] [stdout] test util::tests::pct_50 ... ok
[INFO] [stdout] test util::tests::safe_float_empty ... ok
[INFO] [stdout] test util::tests::pct_negative_clamped ... ok
[INFO] [stdout] test util::tests::pct_over_100_clamped ... ok
[INFO] [stdout] test util::tests::safe_float_garbage ... ok
[INFO] [stdout] test util::tests::safe_float_none_lowercase ... ok
[INFO] [stdout] test util::tests::safe_float_unknown ... ok
[INFO] [stdout] test util::tests::safe_float_valid ... ok
[INFO] [stdout] test util::tests::safe_float_unavailable ... ok
[INFO] [stdout] test util::tests::smoothstep_clamped ... ok
[INFO] [stdout] test util::tests::smoothstep_endpoints ... ok
[INFO] [stdout] test util::tests::smoothstep_mid ... ok
[INFO] [stdout] test util::tests::bri_to_pct_0 ... ok
[INFO] [stdout] test util::tests::bri_to_pct_255 ... ok
[INFO] [stdout] test util::tests::safe_float_none ... ok
[INFO] [stdout] test lux::tests::same_day_window ... ok
[INFO] [stdout] test lux::tests::within_deadband_still_on ... ok
[INFO] [stdout] test overlay::tests::exit_when_not_active ... ok
[INFO] [stdout] test actuator::tests::brightness_within_tolerance_not_written ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 127 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha_py-0fe2469ce559adab)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha_recorder-8190a23234cb86c1)
[INFO] [stdout] 
[INFO] [stdout] running 43 tests
[INFO] [stdout] test deletion_reason::tests::display ... ok
[INFO] [stdout] test filter::tests::allow_all ... ok
[INFO] [stdout] test filter::tests::empty_filter_matches_nothing ... ok
[INFO] [stdout] test filter::tests::exact_match ... ok
[INFO] [stdout] test filter::tests::leading_wildcard ... ok
[INFO] [stdout] test filter::tests::multiple_patterns ... ok
[INFO] [stdout] test filter::tests::middle_wildcard ... ok
[INFO] [stdout] test deletion_reason::tests::invalid_returns_none ... ok
[INFO] [stdout] test filter::tests::star_matches_all ... ok
[INFO] [stdout] test filter::tests::trailing_wildcard ... ok
[INFO] [stdout] test sqlite::tests::dedup_ignores_exact_duplicate ... ok
[INFO] [stdout] test sqlite::tests::entity_profile_unknown_entity ... ok
[INFO] [stdout] test sqlite::tests::entities_lists_distinct ... ok
[INFO] [stdout] test sqlite::tests::age_distribution_covers_all_rows ... ok
[INFO] [stdout] test sqlite::tests::curator_retention_estimate ... ok
[INFO] [stdout] test deletion_reason::tests::roundtrip ... ok
[INFO] [stdout] test sqlite::tests::flag_entity_with_downsample ... ok
[INFO] [stdout] test sqlite::tests::curator_db_overview ... ok
[INFO] [stdout] test sqlite::tests::domain_stats_returns_all_domains ... ok
[INFO] [stdout] test sqlite::tests::flag_domain_flags_all_entities_in_domain ... ok
[INFO] [stdout] test sqlite::tests::flag_preview_no_downsample ... ok
[INFO] [stdout] test sqlite::tests::curator_flagged_summary ... ok
[INFO] [stdout] test sqlite::tests::flag_entity_with_cutoff ... ok
[INFO] [stdout] test sqlite::tests::entity_profile_populated ... ok
[INFO] [stdout] test sqlite::tests::latest_returns_none_for_unknown ... ok
[INFO] [stdout] test sqlite::tests::fastest_entities_returns_shortest_interval ... ok
[INFO] [stdout] test sqlite::tests::flag_entity_all_rows ... ok
[INFO] [stdout] test sqlite::tests::record_with_attributes ... ok
[INFO] [stdout] test sqlite::tests::flag_entity_idempotent ... ok
[INFO] [stdout] test sqlite::tests::record_and_query ... ok
[INFO] [stdout] test sqlite::tests::flagged_counts_by_domain ... ok
[INFO] [stdout] test sqlite::tests::flag_preview_with_downsample ... ok
[INFO] [stdout] test sqlite::tests::time_range_empty_db ... ok
[INFO] [stdout] test sqlite::tests::prune_removes_old_records ... ok
[INFO] [stdout] test sqlite::tests::prune_flagged_respects_grace_period ... ok
[INFO] [stdout] test sqlite::tests::time_range_with_data ... ok
[INFO] [stdout] test sqlite::tests::top_entities_domain_filter ... ok
[INFO] [stdout] test sqlite::tests::flagged_counts_by_reason ... ok
[INFO] [stdout] test sqlite::tests::unflag_by_entity ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/signal_ha_shell-ca62b62252097fe2)
[INFO] [stdout] test sqlite::tests::top_entities_returns_in_order ... ok
[INFO] [stdout] test sqlite::tests::unflag_by_reason ... ok
[INFO] [stdout] test sqlite::tests::prune_flagged_leaves_unflagged_rows ... ok
[INFO] [stdout] test sqlite::tests::latest_returns_most_recent ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 43 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 65 tests
[INFO] [stdout] test convert::tests::test_json_to_entity_state_list ... ok
[INFO] [stdout] test convert::tests::test_json_to_monty_primitives ... ok
[INFO] [stdout] test convert::tests::test_monty_to_json_dict ... ok
[INFO] [stdout] test convert::tests::test_json_to_entity_state ... ok
[INFO] [stdout] test convert::tests::test_monty_to_json_list ... ok
[INFO] [stdout] test convert::tests::test_monty_to_json_primitives ... ok
[INFO] [stdout] test convert::tests::test_roundtrip_dict ... ok
[INFO] [stdout] test host_call::tests::test_ago_returns_none ... ok
[INFO] [stdout] test host_call::tests::test_annotate ... ok
[INFO] [stdout] test host_call::tests::test_annotate_with_tags ... ok
[INFO] [stdout] test host_call::tests::test_del_annotation ... ok
[INFO] [stdout] test host_call::tests::test_get_area_entities ... ok
[INFO] [stdout] test host_call::tests::test_call_service ... ok
[INFO] [stdout] test host_call::tests::test_annotations_all ... ok
[INFO] [stdout] test host_call::tests::test_get_areas ... ok
[INFO] [stdout] test host_call::tests::test_get_logbook_with_hours ... ok
[INFO] [stdout] test host_call::tests::test_get_state_long_name ... ok
[INFO] [stdout] test host_call::tests::test_get_states_with_domain ... ok
[INFO] [stdout] test host_call::tests::test_note ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_minutes ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_weeks ... ok
[INFO] [stdout] test host_call::tests::test_logbook_default_hours ... ok
[INFO] [stdout] test host_call::tests::test_room_alias ... ok
[INFO] [stdout] test host_call::tests::test_notes ... ok
[INFO] [stdout] test host_call::tests::test_history_default_hours ... ok
[INFO] [stdout] test host_call::tests::test_statistics ... ok
[INFO] [stdout] test host_call::tests::test_get_state ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_hours ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_int_passthrough ... ok
[INFO] [stdout] test host_call::tests::test_get_states_no_domain ... ok
[INFO] [stdout] test host_call::tests::test_history_with_hours ... ok
[INFO] [stdout] test host_call::tests::test_rooms_alias ... ok
[INFO] [stdout] test host_call::tests::test_statistics_with_period ... ok
[INFO] [stdout] test host_call::tests::test_statistics_with_period_and_hours ... ok
[INFO] [stdout] test host_call::tests::test_tags_all ... ok
[INFO] [stdout] test host_call::tests::test_show_returns_none ... ok
[INFO] [stdout] test host_call::tests::test_tags_by_entity_id ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_bare_number ... ok
[INFO] [stdout] test host_call::tests::test_unknown_returns_none ... ok
[INFO] [stdout] test repl::tests::test_code_references_external_fn_no_false_positives ... ok
[INFO] [stdout] test repl::tests::test_code_references_external_fn_pure_code ... ok
[INFO] [stderr]    Doc-tests message_board
[INFO] [stdout] test repl::tests::test_code_references_external_fn_extras ... ok
[INFO] [stdout] test host_call::tests::test_tags_set ... ok
[INFO] [stdout] test host_call::tests::test_tags_by_name ... ok
[INFO] [stdout] test repl::tests::test_code_references_external_fn_basic ... ok
[INFO] [stdout] test repl::tests::test_extra_function_suspends ... ok
[INFO] [stdout] test repl::tests::test_error_does_not_corrupt_context ... ok
[INFO] [stdout] test host_call::tests::test_parse_ago_days ... ok
[INFO] [stdout] test repl::tests::test_feed_print ... ok
[INFO] [stdout] test repl::tests::test_feed_external_function_raises_name_error ... ok
[INFO] [stdout] test repl::tests::test_init_repl_empty ... ok
[INFO] [stdout] test repl::tests::test_feed_simple_expression ... ok
[INFO] [stdout] test repl::tests::test_init_repl_syntax_error ... ok
[INFO] [stdout] test repl::tests::test_is_name_error_for_external_fn ... ok
[INFO] [stdout] test repl::tests::test_init_repl_with_extra_functions ... ok
[INFO] [stdout] test repl::tests::test_init_repl_with_code ... ok
[INFO] [stdout] test repl::tests::test_start_syntax_error ... ok
[INFO] [stdout] test repl::tests::test_is_name_error_with_extras ... ok
[INFO] [stdout] test repl::tests::test_name_lookup_resolves_known_function ... ok
[INFO] [stdout] test repl::tests::test_resume_completes ... ok
[INFO] [stdout] test repl::tests::test_unknown_name_in_non_call_raises_error ... ok
[INFO] [stdout] test repl::tests::test_start_simple_expression ... ok
[INFO] [stdout] test repl::tests::test_unknown_function_call_yields_host_call ... ok
[INFO] [stdout] test repl::tests::test_start_external_call_suspends ... ok
[INFO] [stdout] test repl::tests::test_variable_persists_across_snippets ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 65 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests signal_ha
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test crates/signal-ha/src/dashboard.rs - dashboard (line 18) ... ignored
[INFO] [stdout] test crates/signal-ha/src/status.rs - status::StatusPage::router (line 247) - compile ... ok
[INFO] [stdout] test crates/signal-ha/src/status.rs - status (line 20) - compile ... ok
[INFO] [stdout] test crates/signal-ha/src/lib.rs - (line 14) - compile ... ok
[INFO] [stdout] test crates/signal-ha/src/scheduler.rs - scheduler::Scheduler::new (line 23) ... ok
[INFO] [stdout] test crates/signal-ha/src/power_fsm.rs - power_fsm (line 9) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.83s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests signal_ha_agent
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test crates/signal-ha-agent/src/ha_tools.rs - ha_tools (line 6) ... ignored
[INFO] [stdout] test crates/signal-ha-agent/src/lib.rs - (line 41) ... ignored
[INFO] [stdout] test crates/signal-ha-agent/src/session.rs - session::AgentConfig::new (line 105) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests signal_ha_lighting
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests signal_ha_recorder
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test crates/signal-ha-recorder/src/curator.rs - curator (line 13) - compile ... ok
[INFO] [stdout] test crates/signal-ha-recorder/src/recorder.rs - recorder::Recorder (line 81) - compile ... ok
[INFO] [stdout] test crates/signal-ha-recorder/src/lib.rs - (line 14) - compile ... ok
[INFO] [stdout] test crates/signal-ha-recorder/src/filter.rs - filter::EntityFilter (line 7) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.03s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests signal_ha_shell
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test crates/signal-ha-shell/src/lib.rs - (line 33) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "c017020824f97fd3e1b861ad6f59c5b12d958b1a571f5d16c267c5ce1004c6cf", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c017020824f97fd3e1b861ad6f59c5b12d958b1a571f5d16c267c5ce1004c6cf", kill_on_drop: false }`
[INFO] [stdout] c017020824f97fd3e1b861ad6f59c5b12d958b1a571f5d16c267c5ce1004c6cf
